<?php

namespace app\index\controller;
use app\index\Controller;
use think\Validate;
use think\Db;
/**
 * @title 上传（模块04）
 * @description 接口说明
 * @group 上传
 * @header name:model_id   default:04 desc:模块id
 * @groupremark 已使用错误码： 1040001
 * @param name:token type:int require:1  other: desc:token
 */
class Upload extends Controller{
    /**
     * @var array 白名单方法，如果设置会覆盖黑名单方法，只允许白名单方法能正常访问
     */
    protected static $allowList = ['img','ali_oss'];
    /**
     * @title 图片上传
     * @description 接口说明
     * @author 梁敏
     * @url /index/upload/img
     * @method POST
     * @param name:base64 type:int require:1  other: desc:base64图片
     * @return error_id:1040001校验失败
     * @return data:图片信息@!
     * @data utl:图片url id:图片id
     *
     */
    public function img() {
        //接口代码
        $data=input();
        $data['user_id']=UID;
        $vmsg = [
            'token.require' => '缺少token',
            'user_id.require'   => '用户未授权',
            'base64.require'   => '图片内容',
        ];
        $validate = new Validate([
            'token'  => 'require',
            'user_id'=>"require",
            'base64'=>"require",
        ],$vmsg);
        if (!$validate->check($data)) {
            $msg['error_id']="1040001";
            $msg['message']=$validate->getError();
            return $this->error($msg);
        }

        $save_url=$this->save_base64_img($data['base64']);
        if($save_url){

            $img_info= getimagesize($save_url);
            $img['filename']=basename($save_url);
            $save_url=ltrim($save_url, ".");
            $img['url']=get_host().$save_url;
            $img['path']=$save_url;
            $img['mimetype']=$img_info['mime'];
            $img['width']=$img_info[0];
            $img['height']=$img_info[1];
            $img['create_time']=NOW_TIME;
            $re=Db::name('upload_file')->insert($img);
            if($re){
                $id=Db::name("upload_file")->insertGetId($img);
                // 更新司机的头像
//                if (!empty($data['base64'])){
//                    Db::name("driver")->where('user_id', $data['user_id'])->strict(false)->update(['head_img'=>$save_url]);
//                }
                $img['id']=$id;
                $msg['data']=$img;
                return $this->success($msg);
            }
        }

        $msg['error_id']="1040002";
        $msg['message']="上传失败";
        return $this->error($msg);



    }
    /**
     * base64转码图片
     * @param $base64
     * @param string $path
     * @return bool|string
     */
    function save_base64_img($base64,$path = './upload/img/'){
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result)){
            $name=$this->unique_id();
            $type = $result[2];
            $new_file = $path.$name.".{$type}";
            if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64)))){
                return $new_file;
            }else{
                return	false;
            }
        }
    }
    /**
     * unique_ID
     * 生成16位以上唯一ID
     *
     * @author Aspirant Zhang <admin@aspirantzhang.com>
     * @param int $length 不含前缀的长度，最小14，建议16+
     * @param str $prefix 前缀
     * @return str $id
     */
    function unique_id($length = 16,$prefix = ''){
        $id = $prefix;
        $addLength = $length - 13;
        $id .= uniqid();
        if (function_exists('random_bytes')) {
            $id .= substr(bin2hex(random_bytes(ceil(($addLength) / 2))),0,$addLength);
        } elseif (function_exists('openssl_random_pseudo_bytes')) {
            $id .= substr(bin2hex(openssl_random_pseudo_bytes(ceil($addLength / 2))),0,$addLength);
        } else {
            $id .= mt_rand(1*pow(10,($addLength)),9*pow(10,($addLength)));
        }
        return $id;
    }

    public function ali_oss(){
        $response=ali_oss($dir = 'video/');
        return json($response);
    }
}
